package com.hspedu.singleTon;
//单例模式：让一个类只能创建一个对象
//饿汉式
public class SingleTon01 {
    public static void main(String[] args) {
        GirlFriend instance = GirlFriend.getInstance();
        GirlFriend instance1 = GirlFriend.getInstance();
        System.out.println(instance);
        System.out.println(instance1);
        System.out.println(instance == instance1);

        //在这里没有创建对象，直接调用了该类静态的变量
        System.out.println(GirlFriend.n1);//会默认执行GirlFriend类的创建对象的方法
    }
}


/**
 * 只能有一个女朋友
 * 如何保证GirlFriend这个类只能创建一个对象（饿汉式）：
 * 1.将构造器私有化
 * 2.在类的内部直接创建对象（该对象是static，在类加载的时候就创建了）
 * 3.提供一个公共的static方法，返回girlFriend对象
 *
 * 饿汉式缺点：饿汉式创建的对象是static，对象在类加载的时候就创建了，
 *            可能会造成创建了对象，但是却没有使用
 *
 * 在Java标准类中java.lang.Runtime就是经典的单例模式
 */
class GirlFriend{
    private String name;

    public static int n1 = 100;

    private static GirlFriend girlFriend = new GirlFriend("小林");

    public static GirlFriend getInstance(){
        return girlFriend;
    }

    //私有化构造器
    private GirlFriend(String name) {
        this.name = name;
    }

//    @Override
//    public String toString() {
//        return "GirlFriend{" +
//                "name='" + name + '\'' +
//                '}';
//    }
}